<!doctype html>
<!--
  Minimal Mistakes Jekyll Theme 4.20.1 by Michael Rose
  Copyright 2013-2019 Michael Rose - mademistakes.com | @mmistakes
  Free for personal and commercial use under the MIT license
  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE
-->
<html lang="en" class="no-js">
  <head>
    <meta charset="utf-8">

<!-- begin _includes/seo.html --><title>git初次体验 - Antax</title>
<meta name="description" content="git 命令速查表">


  <meta name="author" content="安好">


<meta property="og:type" content="article">
<meta property="og:locale" content="en_US">
<meta property="og:site_name" content="Antax">
<meta property="og:title" content="git初次体验">
<meta property="og:url" content="https://antax.github.io/Antax/git/git%E5%88%9D%E6%AC%A1%E4%BD%93%E9%AA%8C/">


  <meta property="og:description" content="git 命令速查表">



  <meta property="og:image" content="https://antax.github.io/Antax/assets/images/BJ1.jpg">





  <meta property="article:published_time" content="2020-08-23T00:00:00+08:00">






<link rel="canonical" href="https://antax.github.io/Antax/git/git%E5%88%9D%E6%AC%A1%E4%BD%93%E9%AA%8C/">




<script type="application/ld+json">
  {
    "@context": "https://schema.org",
    
      "@type": "Person",
      "name": "安好",
      "url": "https://antax.github.io/Antax/"
    
  }
</script>






<!-- end _includes/seo.html -->


<link href="/Antax/feed.xml" type="application/atom+xml" rel="alternate" title="Antax Feed">

<!-- https://t.co/dKP3o1e -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">

<script>
  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
</script>

<!-- For all browsers -->
<link rel="stylesheet" href="/Antax/assets/css/main.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5/css/all.min.css">

<!--[if IE]>
  <style>
    /* old IE unsupported flexbox fixes */
    .greedy-nav .site-title {
      padding-right: 3em;
    }
    .greedy-nav button {
      position: absolute;
      top: 0;
      right: 0;
      height: 100%;
    }
  </style>
<![endif]-->



    <!-- start custom head snippets -->

<!-- insert favicons. use https://realfavicongenerator.net/ -->

<!-- end custom head snippets -->

  </head>

  <body class="layout--single">
    <nav class="skip-links">
  <h2 class="screen-reader-text">Skip links</h2>
  <ul>
    <li><a href="#site-nav" class="screen-reader-shortcut">Skip to primary navigation</a></li>
    <li><a href="#main" class="screen-reader-shortcut">Skip to content</a></li>
    <li><a href="#footer" class="screen-reader-shortcut">Skip to footer</a></li>
  </ul>
</nav>

    <!--[if lt IE 9]>
<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="https://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
<![endif]-->

    

<div class="masthead">
  <div class="masthead__inner-wrap">
    <div class="masthead__menu">
      <nav id="site-nav" class="greedy-nav">
        
          <a class="site-logo" href="/Antax/"><img src="/Antax/assets/images/logoBig.png" alt=""></a>
        
        <a class="site-title" href="/Antax/">
          Antax
          <span class="site-subtitle">Born alone</span>
        </a>
        <ul class="visible-links"><li class="masthead__menu-item">
              <a href="/Antax/">Blog</a>
            </li><li class="masthead__menu-item">
              <a href="/Antax/categories/">归档</a>
            </li><li class="masthead__menu-item">
              <a href="/Antax/tags/">Tags</a>
            </li><li class="masthead__menu-item">
              <a href="/Antax/year-archive/">历史</a>
            </li><li class="masthead__menu-item">
              <a href="/Antax/about/">About</a>
            </li></ul>
        
        <button class="search__toggle" type="button">
          <span class="visually-hidden">Toggle search</span>
          <svg class="icon" width="16" height="16" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.99 16">
            <path d="M15.5,13.12L13.19,10.8a1.69,1.69,0,0,0-1.28-.55l-0.06-.06A6.5,6.5,0,0,0,5.77,0,6.5,6.5,0,0,0,2.46,11.59a6.47,6.47,0,0,0,7.74.26l0.05,0.05a1.65,1.65,0,0,0,.5,1.24l2.38,2.38A1.68,1.68,0,0,0,15.5,13.12ZM6.4,2A4.41,4.41,0,1,1,2,6.4,4.43,4.43,0,0,1,6.4,2Z" transform="translate(-.01)"></path>
          </svg>
        </button>
        
        <button class="greedy-nav__toggle hidden" type="button">
          <span class="visually-hidden">Toggle menu</span>
          <div class="navicon"></div>
        </button>
        <ul class="hidden-links hidden"></ul>
      </nav>
    </div>
  </div>
</div>


    <div class="initial-content">
      



<div id="main" role="main">
  
  <div class="sidebar sticky">
  


<div itemscope itemtype="https://schema.org/Person">

  
    <div class="author__avatar">
      
        <img src="/Antax/assets/images/title.png" alt="安好" itemprop="image">
      
    </div>
  

  <div class="author__content">
    
      <h3 class="author__name" itemprop="name">安好</h3>
    
    
      <div class="author__bio" itemprop="description">
        <p>清雨化作酒，新风邀入眠。</p>

      </div>
    
  </div>

  <div class="author__urls-wrapper">
    <button class="btn btn--inverse">Follow</button>
    <ul class="author__urls social-icons">
      
        <li itemprop="homeLocation" itemscope itemtype="https://schema.org/Place">
          <i class="fas fa-fw fa-map-marker-alt" aria-hidden="true"></i> <span itemprop="name">Chengdu</span>
        </li>
      

      
        
          
            <li><a href="https://github.com/mmistakes" rel="nofollow noopener noreferrer"><i class="fab fa-fw fa-github" aria-hidden="true"></i><span class="label">GitHub</span></a></li>
          
        
          
            <li><a href="mailto:811226051@qq.com" rel="nofollow noopener noreferrer"><i class="fas fa-fw fa-envelope-square" aria-hidden="true"></i><span class="label">Email</span></a></li>
          
        
          
            <li><a href="https://aontax.github.io" rel="nofollow noopener noreferrer"><i class="fas fa-fw fa-link" aria-hidden="true"></i><span class="label">Website</span></a></li>
          
        
      

      

      

      

      

      

      

      

      

      

      

      

      

      

      

      

      

      

      

      

      

      

      

      

      

      <!--
  <li>
    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs" rel="nofollow noopener noreferrer">
      <i class="fas fa-fw" aria-hidden="true"></i> Custom Social Profile Link
    </a>
  </li>
-->
    </ul>
  </div>
</div>

  
  </div>



  <article class="page" itemscope itemtype="https://schema.org/CreativeWork">
    <meta itemprop="headline" content="git初次体验">
    <meta itemprop="description" content="git 命令速查表">
    <meta itemprop="datePublished" content="2020-08-23T00:00:00+08:00">
    

    <div class="page__inner-wrap">
      
        <header>
          <h1 id="page-title" class="page__title" itemprop="headline">git初次体验
</h1>
          


  <p class="page__meta">

    
      
      <i class="far fa-calendar-alt" aria-hidden="true"></i>
      <time datetime="2020-08-23T00:00:00+08:00">August 23, 2020</time>
    

    
      
      <span class="post__meta-sep"></span>
      
    

    
      
      

      <i class="far fa-clock" aria-hidden="true"></i>
      
        8 minute read
      
    

  </p>

        </header>
      

      <section class="page__content" itemprop="text">
        
          <aside class="sidebar__right ">
            <nav class="toc">
              <header><h4 class="nav__title"><i class="fas fa-file-alt"></i> On this page</h4></header>
              <ul class="toc__menu">
  <li><a href="#git-命令速查表">git 命令速查表</a></li>
  <li><a href="#初次提交命令">初次提交命令</a></li>
  <li><a href="#遇到的问题">遇到的问题</a>
    <ul>
      <li><a href="#q1">Q1</a></li>
      <li><a href="#q2">Q2</a></li>
      <li><a href="#q3">Q3</a>
      - {:.} <a href="#git-config---list查看git的配置信息">git config –list，查看git的配置信息</a>
      - {:.} <a href="#执行git-help--a--grep-credential查看git的信息存储位置">执行git help -a | grep credential，查看git的信息存储位置</a>
      - {:.} <a href="#一般配置方法">一般配置方法：</a>
      - {:.} <a href="#如果上述步骤没有效果我们就需要清除缓存gitconfig">如果上述步骤没有效果，我们就需要清除缓存(.gitconfig)</a>
        <ul>
          <li><a href="#重复输入用户名密码">重复输入用户名密码</a></li>
        </ul>
      </li>
    </ul>
  </li>
  <li><a href="#一台电脑如何配置两个github账户">一台电脑如何配置两个Github账户</a></li>
  <li><a href="#https-和-ssh-的区别">https 和 SSH 的区别：</a></li>
  <li><a href="#在-github-上添加-ssh-key-的步骤">在 github 上添加 SSH key 的步骤：</a>
      - {:.} <a href="#1首先需要检查你电脑是否已经有-ssh-key">1、首先需要检查你电脑是否已经有 SSH key</a>
      - {:.} <a href="#2创建一个-ssh-key">2、创建一个 SSH key</a>
      - {:.} <a href="#3添加你的-ssh-key-到-github上面去">3、添加你的 SSH key 到 github上面去</a>
      - {:.} <a href="#4测试一下该ssh-key">4、测试一下该SSH key</a>
      - {:.} <a href="#多用户时出现权限问题的原因">多用户时出现权限问题的原因：</a>
      - {:.} <a href="#解决ssh权限问题">解决ssh权限问题（）:</a></li>
  <li><a href="#清除git的全局设置">清除git的全局设置</a>
    <ul>
      <li><a href="#生成新站好的ssh-keys">生成新站好的SSH keys</a></li>
    </ul>
  </li>
  <li><a href="#阮一峰-git-教程命令">阮一峰 git 教程命令</a>
      - {:.} <a href="#新建代码库">新建代码库</a>
      - {:.} <a href="#配置">配置</a>
      - {:.} <a href="#增加删除文件">增加/删除文件</a>
      - {:.} <a href="#代码提交">代码提交</a>
      - {:.} <a href="#分支">分支</a>
      - {:.} <a href="#标签">标签</a>
      - {:.} <a href="#查看信息">查看信息</a>
      - {:.} <a href="#远程同步">远程同步</a>
      - {:.} <a href="#撤销">撤销</a>
      - {:.} <a href="#其他">其他</a></li>
</ul>

            </nav>
          </aside>
        
        <h2 id="git-命令速查表">git 命令速查表</h2>

<p><img src="https://i.loli.net/2020/08/23/L1Pac4W6GT3CHBu.png" alt="img" /></p>

<h2 id="初次提交命令">初次提交命令</h2>

<p>今天说说怎么通过 git 基本命令把本地项目成功上传到 Gitee 远端仓库（GitHub 类似）。主要是防止遗忘，方便复盘，默认已经配置好公钥私钥。</p>

<p>首先在个人 Gitee 账户创建一个用来存放项目的仓库，然后点击克隆/下载按钮选择地址复制。</p>

<p>在本地项目文件夹下打开<code class="language-plaintext highlighter-rouge">Git Bash</code>，初始化本地仓库：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git init
</code></pre></div></div>

<p>发现当前目录下多了一个 <strong>.git</strong>文件夹，表示成功初始化本地 git 仓库。</p>

<p>现在要用到之前复制的 Gitee 仓库地址：origin 是仓库简称，可以使用其他名称</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>//关联本地仓库和远端仓库
git remote add origin （刚刚复制的地址/不要写括号）
</code></pre></div></div>

<p>如果之前创建仓库时选了 README.md 初始化仓库的，<strong>需要更新下本地仓库</strong>，以免上传项目时产生冲突：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>//当然，没有选 README.md 的同学也可以敲下，权当练手了
git pull --rebase origin master
</code></pre></div></div>

<p>因为 Git 的结构，我们先将项目上传到本地暂存区：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>//添加项目所有发生改变的文件
git add .
//Git 强烈建议在提交代码时备注信息
git commit -m '你的备注信息可以是中文'
</code></pre></div></div>

<p>如果这时 Git Bash 弹出信息问你是谁，那么代表你是第一次在本机上使用 Git，那就告诉它你的大名吧：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git config --global user.email "你的邮箱"
git config --global user.name "你的大名"
</code></pre></div></div>

<p>最后将本地仓库代码提交到远端仓库就好：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git push -u origin master

# -u ，就是创建 upStream 上传流，如果没有这个上传流就无法将代码推送到 github；同时，这个 upStream 只需要在初次推送代码的时候创建，以后就不用创建了
</code></pre></div></div>

<p><strong>此后项目更新</strong>，上传仓库只要在对应项目路径下打开 Git Bash 输入：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git add .
# 添加全部修改的代码，准备提交
git commit -m '备注'
# 将修改后的代码先提交到本地仓库
git push
# 将代码推送到远端仓库 , 默认推送到别名为origin的仓库中的master分支上
# 同时，可以使用命令git push origin master指定推送
</code></pre></div></div>

<p><strong>注意事项：</strong></p>

<p>如果有多个远程仓库 或者 多个分支， 并且需要将代码推送到指定仓库的指定分支上，那么在 pull 或者 push 的时候，就需要 按照下面的格式书写：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git pull 仓库别名 仓库分支名
# 将 远端 的代码拉取到本地，如果只是自己做的项目，可以忽略pull
git push 仓库别名 仓库分支名
# 将代码推送到 远端仓库
</code></pre></div></div>

<h2 id="遇到的问题">遇到的问题</h2>

<h3 id="q1">Q1</h3>

<p><strong>问题描述：github 上开发的代码突然发现代码性能变差了，需要往前查 PR（pull request），查找是哪一次的提交或修改出错了。</strong></p>

<p>解决方法：找出历史 commit id ，代码回滚到这一个版本，然后重新编译测试。</p>

<p>(1)本地代码回滚：</p>

<p>回退命令：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git reset --hard HEAD^         回退到上个版本

git reset --hard HEAD~3        回退到前3次提交之前，以此类推，回退到n次提交之前

git reset --hard commit_id     退到/进到 指定commit的sha码
</code></pre></div></div>

<p>强推到远程：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git push origin HEAD --force
</code></pre></div></div>

<p>（2）回溯到某一版本后希望看这两个版本中见有哪些修改（哪几次提交代码，修改了哪些文件）</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git diff commit-ID       //可以比较出和某一次commit后代码到差别
</code></pre></div></div>

<p>（git log //可以列出从当前版本往前的 commit ID）</p>

<h3 id="q2">Q2</h3>

<p><strong>问题描述：错误提醒<code class="language-plaintext highlighter-rouge">error: failed to push some refs to...</code>。</strong></p>

<p>然后就发现，这个 error 发生的情况竟然还挺多样化。鉴于自己搜到的页面，都是分散的答案，所以在此做个总结，以免日后又碰到这类错误，烂记性又促使我花费一样的时间去寻找一样的答案。</p>

<ul>
  <li><strong>分支名不完整</strong></li>
</ul>

<p>这个错误大概是最难发现的了，不是说难度系数高，而是大家都把以本地 master 与远程 master 为例去写答案，于是大家会下意识忽略掉本地分支与远程分支名不一样的情况。（也可能这个大家只包含了我….）</p>

<p>git 推送的完整写法如下：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git push @remoteName  @localBranch:@remoteBranch
// eg.remoteName:origin  localBranch:ceshi  emoteBranch:test
git push origin ceshi:test
</code></pre></div></div>

<p>如果本地分支与远程分支名字一样的话，是可以简写的。例如本地和远程的分支名都是 master：</p>

<pre><code class="language-undefined">git push origin master
</code></pre>

<p>如果确认分支名没有错，那就继续往下看</p>

<ul>
  <li><strong>没有提交代码</strong></li>
</ul>

<p>可以用 <code class="language-plaintext highlighter-rouge">git status</code>查看是否忘了把代码提交上去了。若是忘了，提交了就行。</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  git add <span class="nb">.</span>
  git commit <span class="nt">-m</span> <span class="s2">"This is a new commit"</span>
  git push origin master
</code></pre></div></div>

<ul>
  <li><strong>本地与远程产生冲突</strong></li>
</ul>

<p>产生原因：或是有其他协作者提交了代码，或是你之前在远程上直接做了处理。</p>

<p>处理方法：一是直接强覆盖，二是先把远程的变化拉取下来，解决冲突后，再一并提交。</p>

<ol>
  <li>强覆盖</li>
</ol>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git push <span class="nt">-f</span> origin master
</code></pre></div></div>

<ol>
  <li>拉取再提交</li>
</ol>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git pull –-rebase origin maste
git push origin master
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">--rebase</code>到底是干嘛用的，为什么要加他？<code class="language-plaintext highlighter-rouge">–rebase</code>的作用是取消掉本地库中刚刚的 commit，并把他们接到更新后的版本库之中.</p>

<p><img src="https://i.loli.net/2020/08/23/wcmfXKpoM6AySC3.png" alt="gitpush失败2" /></p>

<p><code class="language-plaintext highlighter-rouge">git pull --rebase origin master</code>意为先取消 commit 记录，并且把它们临时 保存为补丁(patch)(这些补丁放到”.git/rebase”目录中)，之后同步远程库到本地，最后合并补丁到本地库之中。</p>

<p><img src="https://i.loli.net/2020/08/23/GZeh8xATMfbrVHj.png" alt="gitpush失败3" /></p>

<p>之后就可以将其 push 到远端仓库了：</p>

<p><img src="https://i.loli.net/2020/08/23/wEHDpnb5qv7gXNF.png" alt="gitpush失败4" /></p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">print</span><span class="p">(</span><span class="s">'nihao!'</span><span class="p">)</span>

<span class="k">for</span><span class="p">(</span><span class="n">i</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span><span class="n">i</span><span class="o">&lt;</span><span class="mi">30</span><span class="p">;</span><span class="n">i</span><span class="o">++</span><span class="p">)</span>
	<span class="nb">sum</span> <span class="o">+=</span> <span class="n">i</span>
</code></pre></div></div>

<h3 id="q3">Q3</h3>

<p><strong>问题描述：<code class="language-plaintext highlighter-rouge">git</code>在 <code class="language-plaintext highlighter-rouge">pull/push</code> 代码的时候提示：<code class="language-plaintext highlighter-rouge">The Requested URL return error 403</code>，这表示我们没有权限来<code class="language-plaintext highlighter-rouge">pull/push</code>相关代码</strong></p>

<p><strong>问题分析</strong>：1、有可能你是真的没有权限(认真脸)。2、修改了<code class="language-plaintext highlighter-rouge">git</code>仓库的用户名和密码，导致你内存和硬盘中缓存的账号密码不能使用。</p>

<p><strong>问题处理</strong>：</p>

<ul>
  <li>
    <h5 id="git-config---list查看git的配置信息"><code class="language-plaintext highlighter-rouge">git config --list</code>，查看<code class="language-plaintext highlighter-rouge">git</code>的配置信息</h5>
  </li>
</ul>

<p><code class="language-plaintext highlighter-rouge">[user]</code> 为你的<code class="language-plaintext highlighter-rouge">git</code>账号配置信息，<code class="language-plaintext highlighter-rouge">[credential]</code>为你的这些信息存储位置</p>

<ul>
  <li>
    <p>linux系统可<code class="language-plaintext highlighter-rouge">vim .git-credentials</code>，查看<code class="language-plaintext highlighter-rouge">credential</code>中缓存的账户</p>
  </li>
  <li>
    <h5 id="执行git-help--a--grep-credential查看git的信息存储位置">执行<code class="language-plaintext highlighter-rouge">git help -a | grep credential</code>，查看<code class="language-plaintext highlighter-rouge">git</code>的信息存储位置</h5>
  </li>
</ul>

<p><code class="language-plaintext highlighter-rouge">git help -a | grep credential</code>命令查看自己系统支持的<code class="language-plaintext highlighter-rouge">crendential</code>, <code class="language-plaintext highlighter-rouge">cache</code> 代表内存中的缓存，<code class="language-plaintext highlighter-rouge">store</code> 代表磁盘。</p>

<p><code class="language-plaintext highlighter-rouge">git config credential.helper</code>命令可以看到 <code class="language-plaintext highlighter-rouge">cache</code>、<code class="language-plaintext highlighter-rouge">store</code>、<code class="language-plaintext highlighter-rouge">osxkeychain(钥匙串)</code>中是否还有<code class="language-plaintext highlighter-rouge">git</code>的配置信息。由图中我们可以得出<code class="language-plaintext highlighter-rouge">git config</code>还存储在<code class="language-plaintext highlighter-rouge">store</code>中</p>

<ul>
  <li>
    <h5 id="一般配置方法">一般配置方法：</h5>
  </li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git config --global (--replace-all) user.name "你的用户名"
git config --global (--replace-all) user.email "你的邮箱"
</code></pre></div></div>

<ul>
  <li>
    <h5 id="如果上述步骤没有效果我们就需要清除缓存gitconfig">如果上述步骤没有效果，我们就需要清除缓存(.gitconfig)</h5>
  </li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git config --local --unset credential.helper
git config --global --unset credential.helper
git config --system --unset credential.helper
</code></pre></div></div>

<ul>
  <li>
    <h4 id="重复输入用户名密码">重复输入用户名密码</h4>
  </li>
</ul>

<p>清除缓存之后我们每次提交代码的时候都需要输入用户名和密码</p>

<ul>
  <li><code class="language-plaintext highlighter-rouge">git config --global credential.helper store</code></li>
</ul>

<p>执行修改<code class="language-plaintext highlighter-rouge">.gitconfig</code>配置文件，把以下内容放置到最后</p>

<div class="language-csharp highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  <span class="p">[</span><span class="n">credential</span><span class="p">]</span>
          <span class="n">helper</span> <span class="p">=</span> <span class="n">store</span>
</code></pre></div></div>

<p>关于<code class="language-plaintext highlighter-rouge">credential</code>的介绍可以点击<a href="https://link.jianshu.com/?t=http://blog.csdn.net/u012163684/article/details/52433645">这里</a></p>

<p>关于<code class="language-plaintext highlighter-rouge">.gitconfig</code>清除缓存可以点击<a href="https://link.jianshu.com/?t=https://stackoverflow.com/questions/16052602/disable-git-credential-osxkeychain">这里</a></p>

<h2 id="一台电脑如何配置两个github账户">一台电脑如何配置两个Github账户</h2>

<p><strong>思路</strong>：配置两个SHH key，管理两个账户</p>

<p><strong>解决方案</strong>：</p>

<p>1、生成两个SSH key（举例方便，这里使用“<strong>one</strong>”和“<strong>two</strong>”两个账户）</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ ssh-keygen -t rsa -C "one@gmail.com"

$ ssh-keygen -t rsa -C "two@gmail.com"
</code></pre></div></div>

<p>不要一路回车，分别在第一个对话的时候输入重命名（<strong>id_rsa_one</strong>和<strong>id_rsa_two</strong>），这样能够分别生成两组包含公私钥的四个文件。</p>

<p><em>注1：ssh-keygen是linux命令，可以让两个机器之间使用ssh而不需要用户名和密码</em></p>

<p><em>住2：一定要在~/.ssh路径下运行命令行，不然生成的文件不会出现在当前目录</em></p>

<p>2、添加私钥</p>

<p>①、打开ssh-agent</p>

<ul>
  <li>
    <p>如果你是github官方的bash：</p>

    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ ssh-agent -s
</code></pre></div>    </div>
  </li>
  <li>
    <p>如果你是其它，比如msysgit</p>

    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ eval $(ssh-agent -s)
</code></pre></div>    </div>
  </li>
</ul>

<p>②、添加私钥</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ ssh-add ~/.ssh/id_rsa_one

$ ssh-add ~/.ssh/id_rsa_two
</code></pre></div></div>

<p>3、添加/编辑config文件</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ touch config
</code></pre></div></div>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># one(one@gmail.com)

    Host one.github.com

　　HostName github.com

　　PreferredAuthentications publickey

　　IdentityFile ~/.ssh/id_rsa_one

　　User one

 

# two(two@ gmail.com)

    Host two.github.com

　　HostName github.com

　　PreferredAuthentications publickey

　　IdentityFile ~/.ssh/id_rsa_two

　　User two
</code></pre></div></div>

<p>4、部署SSH key</p>

<p>5、远程测试</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ ssh –T one.github.com

$ ssh –T two.github.com
</code></pre></div></div>

<p>6、使用</p>

<ul>
  <li>clone到本地</li>
</ul>

<p>原来的写法：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ git clone git@github.com: one的用户名/learngit.git
</code></pre></div></div>

<p>现在的写法：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ git clone git@one.github.com: one的用户名/learngit.git

$ git clone git@two.github.com: two的用户名/learngit.git
</code></pre></div></div>

<ul>
  <li>
    <p>记得给这个仓库设置局部的用户名和邮箱：</p>

    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ git config user.name "one_name" ; git config user.email "one_email"
  
$ git config user.name "two_name" ; git config user.email "two_email"
</code></pre></div>    </div>
  </li>
</ul>

<h2 id="https-和-ssh-的区别">https 和 SSH 的区别：</h2>

<p>1、前者可以随意克隆github上的项目，而不管是谁的；而后者则是你必须是你要克隆的项目的拥有者或管理员，且需要先添加 SSH key ，否则无法克隆。</p>

<p>2、https url 在push的时候是需要验证用户名和密码的；而 SSH 在push的时候，是不需要输入用户名的，如果配置SSH key的时候设置了密码，则需要输入密码的，否则直接是不需要输入密码的。</p>

<h2 id="在-github-上添加-ssh-key-的步骤">在 github 上添加 SSH key 的步骤：</h2>

<h4 id="1首先需要检查你电脑是否已经有-ssh-key">1、首先需要检查你电脑是否已经有 SSH key</h4>

<p>运行 git Bash 客户端，输入如下代码：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ cd ~/.ssh
$ ls
</code></pre></div></div>

<p>这两个命令就是检查是否已经存在 id_rsa.pub 或 id_dsa.pub 文件，如果文件已经存在，那么你可以跳过步骤2，直接进入步骤3。</p>

<h4 id="2创建一个-ssh-key">2、创建一个 SSH key</h4>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ ssh-keygen -t rsa -C "your_email@example.com"
</code></pre></div></div>

<p>代码参数含义：</p>

<p>-t 指定密钥类型，默认是 rsa ，可以省略。
-C 设置注释文字，比如邮箱。
-f 指定密钥文件存储文件名。</p>

<p>以上代码省略了 -f 参数，因此，运行上面那条命令后会让你输入一个文件名，用于保存刚才生成的 SSH key 代码，如：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Generating public/private rsa key pair.
# Enter file in which to save the key (/c/Users/you/.ssh/id_rsa): [Press enter]
</code></pre></div></div>

<p>当然，你也可以不输入文件名，使用默认文件名（推荐），那么就会生成 id_rsa 和 id_rsa.pub 两个秘钥文件。</p>

<p>接着又会提示你输入两次密码（该密码是你push文件的时候要输入的密码，而不是github管理者的密码），</p>

<p>当然，你也可以不输入密码，直接按回车。那么push的时候就不需要输入密码，直接提交到github上了，如：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Enter passphrase (empty for no passphrase): 
# Enter same passphrase again:
</code></pre></div></div>

<p>接下来，就会显示如下代码提示，如：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Your identification has been saved in /c/Users/you/.ssh/id_rsa.
# Your public key has been saved in /c/Users/you/.ssh/id_rsa.pub.
# The key fingerprint is:
# 01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db your_email@example.com
</code></pre></div></div>

<p>当你看到上面这段代码的收，那就说明，你的 SSH key 已经创建成功，你只需要添加到github的SSH key上就可以了。</p>

<h4 id="3添加你的-ssh-key-到-github上面去">3、添加你的 SSH key 到 github上面去</h4>

<p><strong>a、</strong>首先你需要拷贝 id_rsa.pub 文件的内容，你可以用编辑器打开文件复制，也可以用git命令复制该文件的内容，如：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ clip &lt; ~/.ssh/id_rsa.pub
</code></pre></div></div>

<p>　　Window 使用 clip 命令复制，Mac 则使用 pbcopy 命令</p>

<p><strong>b、</strong>登录你的github账号，从又上角的设置（ <a href="https://github.com/settings">Account Settings</a> ）进入，然后点击菜单栏的 SSH key 进入页面添加 SSH key。</p>

<p><strong>c、</strong>点击 Add SSH key 按钮添加一个 SSH key 。把你复制的 SSH key 代码粘贴到 key 所对应的输入框中，记得 SSH key 代码的前后不要留有空格或者回车。当然，上面的 Title 所对应的输入框你也可以输入一个该 SSH key 显示在 github 上的一个别名。默认的会使用你的邮件名称。</p>

<h4 id="4测试一下该ssh-key">4、测试一下该SSH key</h4>

<p>在git Bash 中输入以下代码</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ ssh -T git@github.com
</code></pre></div></div>

<p>当你输入以上代码时，会有一段警告代码，如：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>The authenticity of host 'github.com (207.97.227.239)' can't be established.
# RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
# Are you sure you want to continue connecting (yes/no)?
</code></pre></div></div>

<p>这是正常的，你输入 yes 回车既可。如果你创建 SSH key 的时候设置了密码，接下来就会提示你输入密码，如：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Enter passphrase for key '/c/Users/Administrator/.ssh/id_rsa':
</code></pre></div></div>

<p>当然如果你密码输错了，会再要求你输入，知道对了为止。</p>

<p>注意：输入密码时如果输错一个字就会不正确，使用删除键是无法更正的。</p>

<p>密码正确后你会看到下面这段话，如：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Hi username! You've successfully authenticated, but GitHub does not
# provide shell access.
</code></pre></div></div>

<p>如果用户名是正确的,你已经成功设置SSH密钥。如果你看到 “access denied” ，者表示拒绝访问，那么你就需要使用 https 去访问，而不是 SSH 。</p>

<p>如果你已经有了一套名为 <code class="language-plaintext highlighter-rouge">id_rsa</code> 的公秘钥，将要生成另外一个公钥，比如 aysee ，你也可以使用任何你喜欢的名字。</p>

<p>步骤如下：</p>

<p>1、生成一个新的自定义名称的公钥：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh-keygen -t rsa -C ``"YOUR_EMAIL@YOUREMAIL.COM"` `-f ~/.ssh/aysee
</code></pre></div></div>

<p>　　执行命令后，生成命名的公钥和生成默认公钥的步骤一样。</p>

<p>执行完成后，会在 ~/.ssh/目录下生成一个 aysee 和 aysee.pub 文件。</p>

<p>2、在 SSH 用户配置文件 ~/.ssh/config 中指定对应服务所使用的公秘钥名称，如果没有 config 文件的话就新建一个，并输入以下内容：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Host github.com www.github.com`` ``IdentityFile ~/.ssh/aysee
</code></pre></div></div>

<p>3、添加 aysee.pub 到你的git服务器网站上。</p>

<p>4、测试配置文件是否正常工作</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh -T git@gitcafe.com
</code></pre></div></div>

<p>　　如果，正常的话，会出现如下提示：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Hi USERNAME! You've successfully authenticated, but github does not provide shell access.
</code></pre></div></div>

<p>　　如果出现如下提示，则说明有权限问题：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Permission denied (publickey)
</code></pre></div></div>

<p>　　如果有权限问题的情况下，你对项目执行push操作的时候，会得到如下提示：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Warning: Permanently added the RSA host key ``for` `IP address ``'192.30.252.129'` `to the list of known hosts.``Permission denied (publickey).``fatal: Could not read ``from` `remote repository.` `Please make sure you have the correct access rights``and the repository exists.
</code></pre></div></div>

<p>　　</p>

<h4 id="多用户时出现权限问题的原因">多用户时出现权限问题的原因：</h4>

<p>github使用SSH与客户端连接。如果是单用户（first），生成密钥对后，将公钥保存至 <a href="http://higrid.net/c-tags.htm#github">GitHub</a> ，每次连接时SSH客户端发送本地私钥（默认~/.ssh/id_rsa）到服务端验证。单用户情况下，连接的服务器上保存的公钥和发送的私钥自然是配对的。但是如果是 <strong>多用户</strong> （first，second），我们在连接到second的帐号时，second保存的是自己的公钥，但是SSH客户端依然发送默认私钥，即first的私钥，那么这个验证自然无法通过。</p>

<h4 id="解决ssh权限问题">解决ssh权限问题（）:</h4>

<p>通常一台电脑生成一个ssh不会有这个问题，当一台电脑生成多个ssh的时候，就可能遇到这个问题，解决步骤如下：</p>

<p>1、查看系统ssh-key代理,执行如下命令</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ ssh-add -l
</code></pre></div></div>

<p>　　以上命令如果输出 The agent has no identities. 则表示没有代理。如果系统有代理，可以执行下面的命令清除代理:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ ssh-add -D
</code></pre></div></div>

<p>2、然后依次将不同的ssh添加代理，执行命令如下：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ ssh-add ~/.ssh/id_rsa``$ ssh-add ~/.ssh/aysee
</code></pre></div></div>

<p>　你会分别得到如下提示：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>2048 8e:71:ad:88:78:80:b2:d9:e1:2d:1d:e4:be:6b:db:8e /Users/aysee/.ssh/id_rsa (RSA)
</code></pre></div></div>

<p>　　和</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>2048 8e:71:ad:88:78:80:b2:d9:e1:2d:1d:e4:be:6b:db:8e /Users/aysee/.ssh/id_rsa (RSA)``2048 a7:f4:0d:f1:b1:76:0b:bf:ed:9f:53:8c:3f:4c:f4:d6 /Users/aysee/.ssh/aysee (RSA)
</code></pre></div></div>

<p>　　如果使用 ssh-add ~/.ssh/id_rsa的时候报如下错误，则需要先运行一下 ssh-agent bash 命令后再执行 ssh-add …等命令</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Could not open a connection to your authentication agent.
</code></pre></div></div>

<p>　　</p>

<p>3、配置 ~/.ssh/config 文件</p>

<p>　　如果没有就在~/.ssh目录创建config文件，该文件用于配置私钥对应的服务器</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># Default github user(first@mail.com)` `Host github.com``HostName github.com``User git``IdentityFile C:/Users/username/.ssh/id_rsa` `# aysee (company_email@mail.com)``Host github-aysee``HostName github.com``User git``IdentityFile C:/Users/username/.ssh/aysee
</code></pre></div></div>

<p>　　Host随意即可，方便自己记忆，后续在添加remote是还需要用到。 配置完成后，在连接非默认帐号的github仓库时，远程库的地址要对应地做一些修改，比如现在添加second帐号下的一个仓库test，则需要这样添加：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git remote add test git@github-aysee:ay-seeing/test.git``#并非原来的git@github.com:ay-seeing/test.git
</code></pre></div></div>

<p>　　ay-seeing 是github的用户名</p>

<p>4、测试 ssh</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh -T git@github.com
</code></pre></div></div>

<p>　　你会得到如下提示，表示这个ssh公钥已经获得了权限</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Hi USERNAME! You've successfully authenticated, but github does not provide shell access.
</code></pre></div></div>

<p>　</p>

<h2 id="清除git的全局设置">清除git的全局设置</h2>

<p>如果你之前在设置本地仓库和github连接的时候设置过<strong>user.name</strong>和<strong>user.email</strong>,那么你必须首先清楚掉该设置，因为不清楚掉该设置，两个账号在提交资料的时候，验证肯定冲突（只能设置一个全局的<strong>user.name</strong>和<strong>user.email</strong>，而你现在有两个账号就对应两个不同的）。</p>

<div class="language-js highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nx">git</span> <span class="nx">config</span> <span class="o">--</span><span class="nb">global</span> <span class="nx">user</span><span class="p">.</span><span class="nx">name</span> <span class="dl">"</span><span class="s2">your_name</span><span class="dl">"</span>
<span class="nx">git</span> <span class="nx">config</span> <span class="o">--</span><span class="nb">global</span> <span class="nx">user</span><span class="p">.</span><span class="nx">email</span>  <span class="dl">"</span><span class="s2">your_email</span><span class="dl">"</span>
</code></pre></div></div>

<p>就是重新设置覆盖了而已，如果没有设置，可以直接跳转第二部。如果你忘了，最好还是覆盖一下。</p>

<h3 id="生成新站好的ssh-keys">生成新站好的SSH keys</h3>

<p>前面提到过生成的SSH keys里面包含了账号和邮箱信息，所以新账号必须另外在生成一份SSH keys，当然生成的方式和以前一样。</p>

<p><strong>1. 用ssh-keygen命令生成一组新的id_rsa_new和id_rsa_new.pub</strong></p>

<div class="language-js highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nx">ssh</span><span class="o">-</span><span class="nx">keygen</span> <span class="o">-</span><span class="nx">t</span> <span class="nx">rsa</span> <span class="o">-</span><span class="nx">C</span> <span class="dl">"</span><span class="s2">new email</span><span class="dl">"</span>
</code></pre></div></div>

<p>平时我们都是直接回车，默认生成id_rsa和id_rsa.pub。这里特别需要注意，出现提示输入文件名的时候(<code class="language-plaintext highlighter-rouge">Enter file in which to save the key (~/.ssh/id_rsa): id_rsa_new</code>)要输入与默认配置不一样的文件名，比如：我这里填的是 id_rsa_new</p>

<p>注：windows用户和mac用户的区别就是，mac中<code class="language-plaintext highlighter-rouge">.ssh</code>文件夹在根目录下，所以表示成<code class="language-plaintext highlighter-rouge">~/.ssh/</code>,而windwos用户是<code class="language-plaintext highlighter-rouge">C:\Users\Administrator\.ssh</code>。
 下面同理，不在赘述。</p>

<p><strong>2. 执行ssh-agent让ssh识别新的私钥</strong></p>

<p>因为默认只读取id_rsa，为了让SSH识别新的私钥，需将其添加到SSH agent中：</p>

<div class="language-js highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nx">ssh</span><span class="o">-</span><span class="nx">add</span> <span class="o">~</span><span class="sr">/.ssh/i</span><span class="nx">d_rsa_work</span>   
</code></pre></div></div>

<p>如果出现<code class="language-plaintext highlighter-rouge">Could not open a connection to your authentication agent</code>的错误，就试着用以下命令：</p>

<div class="language-js highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nx">ssh</span><span class="o">-</span><span class="nx">agent</span> <span class="nx">bash</span>
<span class="nx">ssh</span><span class="o">-</span><span class="nx">add</span> <span class="o">~</span><span class="sr">/.ssh/i</span><span class="nx">d_rsa_work</span>
</code></pre></div></div>

<p><strong>3. 配置~/.ssh/config文件</strong>
 前面我们在~/.ssh目录下面，使用ssh-keygen -C “your_email” -t rsa 生成公私秘钥，当有多个github账号的时候，可以生成多组rsa的公司密钥。然后配置~/.ssh/config文件（如果没有的话请重新创建一个）。</p>

<div class="language-js highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nx">touch</span> <span class="nx">config</span>        <span class="err">#</span> <span class="nx">创建config文件</span>
</code></pre></div></div>

<p>然后修改如下：
我的config配置如下：</p>

<div class="language-js highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">#</span> <span class="nx">该文件用于配置私钥对应的服务器</span>
<span class="err">#</span> <span class="nx">Default</span> <span class="nx">github</span> <span class="nx">user</span><span class="p">(</span><span class="nx">chping_2125</span><span class="p">@</span><span class="nd">163</span><span class="p">.</span><span class="nx">com</span><span class="p">)</span>
<span class="nx">Host</span> <span class="nx">git</span><span class="p">@</span><span class="nd">github</span><span class="p">.</span><span class="nx">com</span>
 <span class="nx">HostName</span> <span class="nx">https</span><span class="p">:</span><span class="c1">//github.com</span>
 <span class="nx">User</span> <span class="nx">git</span>
 <span class="nx">IdentityFile</span> <span class="o">~</span><span class="sr">/.ssh/i</span><span class="nx">d_rsa</span>

 <span class="err">#</span> <span class="nx">second</span> <span class="nx">user</span><span class="p">(</span><span class="nx">second</span><span class="p">@</span><span class="nd">mail</span><span class="p">.</span><span class="nx">com</span><span class="p">)</span>
 <span class="err">#</span> <span class="nx">建一个github别名</span><span class="err">，</span><span class="nx">新建的帐号使用这个别名做克隆和更新</span>
<span class="nx">Host</span> <span class="nx">git</span><span class="p">@</span><span class="nd">code</span><span class="p">.</span><span class="nx">xxxxxxx</span><span class="p">.</span><span class="nx">com</span>
 <span class="nx">HostName</span> <span class="nx">https</span><span class="p">:</span><span class="c1">//code.xxxxxxx.com    #公司的gitlab</span>
 <span class="nx">User</span> <span class="nx">git</span>
 <span class="nx">IdentityFile</span> <span class="o">~</span><span class="sr">/.ssh/i</span><span class="nx">d_rsa_new</span>
</code></pre></div></div>

<p>如果存在config文件的话，其实就是往这个config中添加一个Host：</p>

<div class="language-js highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">#</span><span class="nx">建一个github别名</span><span class="err">，</span><span class="nx">新建的帐号使用这个别名做克隆和更新</span>
<span class="nx">Host</span> <span class="nx">git</span><span class="p">@</span><span class="nd">code</span><span class="p">.</span><span class="nx">xxxxxxx</span><span class="p">.</span><span class="nx">com</span>
 <span class="nx">HostName</span> <span class="nx">https</span><span class="p">:</span><span class="c1">//code.xxxxxxx.com    #公司的gitlab</span>
 <span class="nx">User</span> <span class="nx">git</span>
 <span class="nx">IdentityFile</span> <span class="o">~</span><span class="sr">/.ssh/i</span><span class="nx">d_rsa_new</span>
</code></pre></div></div>

<p>其规则就是：从上至下读取<strong>config</strong>的内容，在每个Host下寻找对应的私钥。这里将GitHub SSH仓库地址中的<strong><a href="https://link.jianshu.com?t=mailto:git@github.com">git@github.com</a></strong>替换成新建的Host别名如：我直接就写成了<code class="language-plaintext highlighter-rouge">git@github.com</code>，那么原地址是：<a href="https://link.jianshu.com?t=mailto:git@github.com">git@github.com</a>:chping2125/test.git，替换后任然是：<a href="https://link.jianshu.com?t=mailto:it@github.com">it@github.com</a>:chping2125/test.git。
 如果你配置的是这样：</p>

<div class="language-js highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">#</span> <span class="nx">该文件用于配置私钥对应的服务器</span>
<span class="err">#</span> <span class="nx">Default</span> <span class="nx">github</span> <span class="nx">user</span><span class="p">(</span><span class="nx">chping_2125</span><span class="p">@</span><span class="nd">163</span><span class="p">.</span><span class="nx">com</span><span class="p">)</span>
<span class="nx">Host</span> <span class="nx">git1</span>    <span class="err">#############</span><span class="nx">不同在这里</span>
<span class="nx">HostName</span> <span class="nx">https</span><span class="p">:</span><span class="c1">//github.com</span>
<span class="nx">User</span> <span class="nx">git</span>
<span class="nx">IdentityFile</span> <span class="o">~</span><span class="sr">/.ssh/i</span><span class="nx">d_rsa</span>

<span class="err">#</span> <span class="nx">second</span> <span class="nx">user</span><span class="p">(</span><span class="nx">second</span><span class="p">@</span><span class="nd">mail</span><span class="p">.</span><span class="nx">com</span><span class="p">)</span>
<span class="err">#</span> <span class="nx">建一个github别名</span><span class="err">，</span><span class="nx">新建的帐号使用这个别名做克隆和更新</span>
<span class="nx">Host</span> <span class="nx">git2</span>  <span class="err">#############</span><span class="nx">不同在这里</span>
<span class="nx">HostName</span> <span class="nx">https</span><span class="p">:</span><span class="c1">//code.xxxxxxx.com    #公司的gitlab</span>
<span class="nx">User</span> <span class="nx">git</span>
<span class="nx">IdentityFile</span> <span class="o">~</span><span class="sr">/.ssh/i</span><span class="nx">d_rsa_new</span>
</code></pre></div></div>

<p>那么你原本想在新账号克隆的命令是：</p>

<div class="language-js highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nx">git</span> <span class="nx">clone</span> <span class="nx">git</span><span class="p">@</span><span class="nd">xxxxxx</span><span class="p">.</span><span class="nx">com</span><span class="p">:</span><span class="nx">chping</span><span class="o">/</span><span class="nx">test</span><span class="p">.</span><span class="nx">git</span>
</code></pre></div></div>

<p>就要相应的变成：</p>

<div class="language-js highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nx">git</span> <span class="nx">clone</span> <span class="nx">git2</span><span class="p">:</span><span class="nx">chping</span><span class="o">/</span><span class="nx">test</span><span class="p">.</span><span class="nx">git</span>
</code></pre></div></div>

<p><strong>4. 添加新的SSH keys到新账号的SSH设置中</strong>
 可不要忘了将新生成的SSH keys添加到你的另一个github帐号(或者公司的gitlab)下的SSH Key中。</p>

<p><strong>测试一下</strong></p>

<div class="language-js highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nx">$</span> <span class="nx">ssh</span> <span class="o">-</span><span class="nx">T</span> <span class="nx">git</span><span class="p">@</span><span class="nd">github</span><span class="p">.</span><span class="nx">com</span>
<span class="nx">Hi</span> <span class="nx">BeginMan</span><span class="o">!</span> <span class="nx">You</span><span class="dl">'</span><span class="s1">ve successfully authenticated, but GitHub does not provide shell access.

# 上面是github的成功返回语句，下面是gitlab的成功返回语句。

$ ssh -T git@xxxxxx.com
Welcome to GitLab, chping!
</span></code></pre></div></div>

<h2 id="阮一峰-git-教程命令">阮一峰 git 教程命令</h2>

<h4 id="新建代码库">新建代码库</h4>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># 在当前目录新建一个Git代码库
$ git init
# 新建一个目录，将其初始化为Git代码库
$ git init [project-name]
# 下载一个项目和它的整个代码历史
$ git clone [url]
</code></pre></div></div>

<h4 id="配置">配置</h4>

<p>Git 的设置文件为<code class="language-plaintext highlighter-rouge">.gitconfig</code>，它可以在用户主目录下，也可以在项目目录下。</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># 显示当前的Git配置
$ git config --list
# 编辑Git配置文件
$ git config -e [--global]
# 设置提交代码时的用户信息
$ git config [--global] user.name "[name]"
$ git config [--global] user.email "[email address]"
</code></pre></div></div>

<h4 id="增加删除文件">增加/删除文件</h4>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># 添加指定文件到暂存区
$ git add [file1] [file2] ...
# 添加指定目录到暂存区，包括子目录
$ git add [dir]
# 添加当前目录的所有文件到暂存区
$ git add .
# 删除工作区文件，并且将这次删除放入暂存区
$ git rm [file1] [file2] ...
# 停止追踪指定文件，但该文件会保留在工作区
$ git rm --cached [file]
# 改名文件，并且将这个改名放入暂存区
$ git mv [file-original] [file-renamed]
</code></pre></div></div>

<h4 id="代码提交">代码提交</h4>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># 提交暂存区到仓库区
$ git commit -m [message]
# 提交暂存区的指定文件到仓库区
$ git commit [file1] [file2] ... -m [message]
# 提交工作区自上次commit之后的变化，直接到仓库区
$ git commit -a
# 提交时显示所有diff信息
$ git commit -v
# 使用一次新的commit，替代上一次提交
# 如果代码没有任何新变化，则用来改写上一次commit的提交信息
$ git commit --amend -m [message]
# 重做上一次commit，并包括指定文件的新变化
$ git commit --amend &lt;file1&gt; &lt;file2&gt; ...
</code></pre></div></div>

<h4 id="分支">分支</h4>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># 列出所有本地分支
$ git branch
# 列出所有远程分支
$ git branch -r
# 列出所有本地分支和远程分支
$ git branch -a
# 新建一个分支，但依然停留在当前分支
$ git branch [branch-name]
# 新建一个分支，并切换到该分支
$ git checkout -b [branch]
# 新建一个分支，指向指定commit
$ git branch [branch] [commit]
# 新建一个分支，与指定的远程分支建立追踪关系
$ git branch --track [branch] [remote-branch]
# 切换到指定分支，并更新工作区
$ git checkout [branch-name]
# 建立追踪关系，在现有分支与指定的远程分支之间
$ git branch --set-upstream [branch] [remote-branch]
# 合并指定分支到当前分支
$ git merge [branch]
# 选择一个commit，合并进当前分支
$ git cherry-pick [commit]
# 删除分支
$ git branch -d [branch-name]
# 删除远程分支
$ git push origin --delete &lt;branch-name&gt;
$ git branch -dr &lt;remote/branch&gt;
</code></pre></div></div>

<h4 id="标签">标签</h4>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># 列出所有tag
$ git tag
# 新建一个tag在当前commit
$ git tag [tag]
# 新建一个tag在指定commit
$ git tag [tag] [commit]
# 查看tag信息
$ git show [tag]
# 提交指定tag
$ git push [remote] [tag]
# 提交所有tag
$ git push [remote] --tags
# 新建一个分支，指向某个tag
$ git checkout -b [branch] [tag]
</code></pre></div></div>

<h4 id="查看信息">查看信息</h4>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># 显示有变更的文件
$ git status
# 显示当前分支的版本历史
$ git log
# 显示commit历史，以及每次commit发生变更的文件
$ git log --stat
# 显示某个文件的版本历史，包括文件改名
$ git log --follow [file]
$ git whatchanged [file]
# 显示指定文件相关的每一次diff
$ git log -p [file]
# 显示指定文件是什么人在什么时间修改过
$ git blame [file]
# 显示暂存区和工作区的差异
$ git diff
# 显示暂存区和上一个commit的差异
$ git diff --cached [&lt;file&gt;]
# 显示工作区与当前分支最新commit之间的差异
$ git diff HEAD
# 显示两次提交之间的差异
$ git diff [first-branch]...[second-branch]
# 显示某次提交的元数据和内容变化
$ git show [commit]
# 显示某次提交发生变化的文件
$ git show --name-only [commit]
# 显示某次提交时，某个文件的内容
$ git show [commit]:[filename]
# 显示当前分支的最近几次提交
$ git reflog
</code></pre></div></div>

<h4 id="远程同步">远程同步</h4>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># 下载远程仓库的所有变动
$ git fetch [remote]
# 显示所有远程仓库
$ git remote -v
# 显示某个远程仓库的信息
$ git remote show [remote]
# 增加一个新的远程仓库，并命名
$ git remote add [shortname] [url]
# 取回远程仓库的变化，并与本地分支合并
$ git pull [remote] [branch]
# 上传本地指定分支到远程仓库
$ git push [remote] [branch]
# 强行推送当前分支到远程仓库，即使有冲突
$ git push [remote] --force
# 推送所有分支到远程仓库
$ git push [remote] --all
</code></pre></div></div>

<h4 id="撤销">撤销</h4>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># 恢复暂存区的指定文件到工作区
$ git checkout [file]
# 恢复某个commit的指定文件到工作区
$ git checkout [commit] [file]
# 恢复上一个commit的所有文件到工作区
$ git checkout .
# 重置暂存区的指定文件，与上一次commit保持一致，但工作区不变
$ git reset [file]
# 重置暂存区与工作区，与上一次commit保持一致
$ git reset --hard
# 重置当前分支的指针为指定commit，同时重置暂存区，但工作区不变
$ git reset [commit]
# 重置当前分支的HEAD为指定commit，同时重置暂存区和工作区，与指定commit一致
$ git reset --hard [commit]
# 重置当前HEAD为指定commit，但保持暂存区和工作区不变
$ git reset --keep [commit]
# 新建一个commit，用来撤销指定commit
# 后者的所有变化都将被前者抵消，并且应用到当前分支
$ git revert [commit]
</code></pre></div></div>

<h4 id="其他">其他</h4>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># 生成一个可供发布的压缩包
# git archive
</code></pre></div></div>

<p>##</p>

        
      </section>

      <footer class="page__meta">
        
        


  


  
  
  

  <p class="page__taxonomy">
    <strong><i class="fas fa-fw fa-folder-open" aria-hidden="true"></i> Categories: </strong>
    <span itemprop="keywords">
    
      
      
      <a href="/Antax/categories/git" class="page__taxonomy-item" rel="tag">Git</a>
    
    </span>
  </p>


        
  <p class="page__date"><strong><i class="fas fa-fw fa-calendar-alt" aria-hidden="true"></i> Updated:</strong> <time datetime="2020-08-23T00:00:00+08:00">August 23, 2020</time></p>


      </footer>

      

      
    </div>

    
  </article>

  
  
    <div class="page__related">
      <h4 class="page__related-title">You May Also Enjoy</h4>
      <div class="grid__wrapper">
        
          
            
      </div>
    </div>
  
</div>

    </div>

    
      <div class="search-content">
        <div class="search-content__inner-wrap"><form class="search-content__form" onkeydown="return event.key != 'Enter';">
    <label class="sr-only" for="search">
      Enter your search term...
    </label>
    <input type="search" id="search" class="search-input" tabindex="-1" placeholder="Enter your search term..." />
  </form>
  <div id="results" class="results"></div></div>

      </div>
    

    <div id="footer" class="page__footer">
      <footer>
        <!-- start custom footer snippets -->

<!-- end custom footer snippets -->
        <div class="page__footer-follow">
  <ul class="social-icons">
    

    

    <li><a href="/Antax/feed.xml"><i class="fas fa-fw fa-rss-square" aria-hidden="true"></i> Feed</a></li>
  </ul>
</div>

<div class="page__footer-copyright">&copy; 2020 安好. Powered by <a href="https://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>

      </footer>
    </div>

    
  <script src="/Antax/assets/js/main.min.js"></script>




<script src="/Antax/assets/js/lunr/lunr.min.js"></script>
<script src="/Antax/assets/js/lunr/lunr-store.js"></script>
<script src="/Antax/assets/js/lunr/lunr-en.js"></script>







  </body>
</html>
